Использование Hibernate

Начиная с версии 2.0, OpenXava использовал каркас Hibernate для доступа к базам данных.

Настройка вашего приложения для использования Hibernate

С версии v3.0 для сохранения состояния объектов OpenXava, по-умолчанию, использует JPA. Если вы хотите использовать Hibernate, вам нужно указать это в файле properties/xava.properties:
 # Hibernate
 persistenceProviderClass=org.openxava.model.impl.HibernatePersistenceProvider
 mapFacadeAsEJB=false
Теперь ваше приложение будет использовать Hibernate для сохранения состояния объектов.

Использование Hibernate API в приложениях OpenXava

Вы можете использовать Hibernate API в любой части вашего приложения OpenXava, например, в калькуляторах (calculators), валидаторах (validators), действиях (actions), фильтрах (filters) и т.д.
Для облегчения использования Hibernate OpenXava предоставляет класс XHibernate . Например, если вы хотите сохранить объект в базе данных, используя Hibernate API, обычная реализация будет:
 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
 session.beginTransaction();
 Customer customer = ... ;
 session.save(customer);
 session.getTransaction().commit();
 session.close();
 
Внутри OpenXava вы имеете использовать более элегантный вариант, реализованный с помощью класса XHibernate:
 Customer customer = ... ;
 XHibernate.getSession().save(customer);
Вуа-ля.
Первый раз, когда вы вызываете XHibernate.getSession(), сессия сохраняется и ассоциируется с текущим потоком, кроме того, создается транзакция. При следующем обращении к методу, будет возвращена та же сессия Hibernate. В конце цикла выполнения действия (action) OpenXava автоматически выполнит commit транзакции и закроет сессию. Кроме того, XHibernate.getSession() корректно работает внутри и вне среды CMT.
Вы можете также выполнить commit вызовом XHibernate.commit() в любой момент, когда вам это нужно. После вызова XHibernate.getSession() новая сессия и новая транзакция будут созданы.
Более подробную информацию вы найдете документации по API ( класс org.openxava.hibernate.XHibernate).